home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / quarkpy / mdlmgr.py < prev    next >
Text File  |  2004-01-05  |  6KB  |  206 lines

  1. """   QuArK  -  Quake Army Knife
  2.  
  3. Model editor Layout managers.
  4. """
  5. #
  6. # Copyright (C) 1996-99 Armin Rigo
  7. # THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
  8. # FOUND IN FILE "COPYING.TXT"
  9. #
  10.  
  11. #$Header: /cvsroot/quark/runtime/quarkpy/mdlmgr.py,v 1.7 2003/12/17 13:58:59 peter-b Exp $
  12.  
  13.  
  14.  
  15. #
  16. # This file defines the base class for Model Layout Managers.
  17. # See the description in mapmgr.py for more information.
  18. #
  19.  
  20.  
  21. import math
  22. import quarkx
  23. import qtoolbar
  24. import qmenu
  25. from mdlutils import *
  26. import mdltools
  27. import mdlhandles
  28. from qbasemgr import BaseLayout
  29. from qbasemgr import MPPage
  30.  
  31.  
  32. class ModelLayout(BaseLayout):
  33.     "An abstract base class for Model Editor screen layouts."
  34.  
  35.     MODE = SS_MODEL
  36.     MAXAUTOZOOM = 10.0
  37.  
  38.     def clearrefs(self):
  39.         BaseLayout.clearrefs(self)
  40.         self.skinform = None
  41.         self.skinview = None
  42.     #    self.dataform = None
  43.     #    self.faceform = None
  44.     #    self.faceview = None
  45.     #    self.faceflags = None
  46.  
  47.  
  48.     def readtoolbars(self, config):
  49.         readtoolbars(mdltools.toolbars, self, self.editor.form, config)
  50.  
  51.     def bs_skinform(self, panel):
  52.         fp = panel.newpanel()
  53.         tp = fp.newtoppanel(124)
  54.         self.skinform = tp.newdataform()
  55.         self.skinform.header = 0
  56.         self.skinform.sep = -79
  57.         self.skinform.setdata([], quarkx.getqctxlist(':form', "Skin")[-1])
  58. #        self.skinform.onchange = self.skinformchange
  59.         self.skinview = fp.newmapview()
  60. #        self.skinview.color = NOCOLOR
  61. #        self.skinview.ondraw = self.skinviewdraw
  62. #        self.skinview.onmouse = self.skinviewmouse
  63.         return fp
  64.  
  65.     def bs_additionalpages(self, panel):
  66.         "Builds additional pages for the multi-pages panel."
  67.         skin = qtoolbar.button(self.fillskinform, "Parameters about the selected skin", ico_objects, iiPcx)
  68.         skin.pc = [self.bs_skinform(panel)]
  69.         return [skin], mppages
  70. #        return [], mppages
  71.  
  72.     def bs_userobjects(self, panel):
  73.         "A panel with user-defined model objects."
  74.         #
  75.         # Note : for the map editor, the userdatapanel is game-specific because there are too
  76.         # much dependencies (textures, etc). For the Model editor, however, I don't see any
  77.         # reason to make it game-specific.
  78.         #
  79.         MdlUserDataPanel(panel, "Drop your most commonly used Model parts to this panel", "MdlObjPanel.qrk",
  80.           "UserData.qrk")
  81.  
  82.     def actionmpp(self):
  83.         "Switch the multi-pages-panel for the current selection."
  84.         pass#...
  85.         #if (self.mpp.n<4) and not (self.mpp.lock.state & qtoolbar.selected):
  86.         #    fs = self.explorer.focussel
  87.         #    if fs is None:
  88.         #        self.mpp.viewpage(0)
  89.         #    elif fs.type == ':e':
  90.         #        self.mpp.viewpage(1)
  91.         #    elif fs.type == ':p':
  92.         #        self.mpp.viewpage(2)
  93.         #    elif fs.type == ':f':
  94.         #        self.mpp.viewpage(3)
  95.  
  96.  
  97.     def componentof(self, obj):
  98.         "Searches for the parent component."
  99.  
  100.         while not ((obj is None) or (obj is self.editor.Root)):
  101.             obj = obj.parent
  102.             if obj.type == ':mc':
  103.                 return obj
  104.  
  105.     def fillskinform(self, reserved):
  106.         self.skinview.handles = []
  107.         self.skinview.ondraw = None
  108.         self.skinview.color = NOCOLOR
  109.         self.skinview.invalidate(1)
  110.         mdlhandles.buildskinvertices(self.editor, self.skinview, self.editor.Root.currentcomponent)
  111.         q = quarkx.newobj(':')   # internal object
  112.         if self.editor.Root.currentcomponent is not None:
  113.           q["header"] = "Selected Skin"
  114.           q["triangles"] = str(len(self.editor.Root.currentcomponent.triangles))
  115.           q["ownedby"] = self.editor.Root.currentcomponent.shortname
  116.         self.skinform.setdata(q, self.skinform.form)
  117.  
  118.     def selectcomponent(self, comp):
  119.         self.editor.Root.setcomponent(comp)
  120.         self.editor.invalidateviews(1)
  121.  
  122.     def selectcgroup(self, group):
  123.         comp = self.componentof(group)
  124.         if comp is not None:
  125.           self.selectcomponent(comp)
  126.  
  127.     def selectframe(self, frame):
  128.         c = self.componentof(frame)
  129.         if c is not None and frame is not c.currentframe:
  130.             self.selectcomponent(c)
  131.             c.setframe(frame)
  132.             self.editor.invalidateviews(1)
  133.             c.setparentframes(frame)
  134.  
  135.     def selectskin(self, skin):
  136.         c = self.componentof(skin)
  137.         if c is not None and skin is not c.currentskin:
  138.             self.selectcomponent(c)
  139.             c.currentskin = skin
  140.             self.editor.invalidatetexviews()
  141.  
  142.     def selchange(self):
  143.         #if self.faceflags is not None:
  144.         #    self.loadfaceflags()
  145.         self.mpp.resetpage()
  146.         
  147.         fs = self.explorer.uniquesel
  148.         if fs is not None:
  149.             if fs.type == ':mf':       # frame
  150.                 self.selectframe(fs)
  151.             elif fs.type == ':fg':     # frame group
  152.                 self.selectcgroup(fs)
  153.             elif fs.type == ':sg':     # skin group
  154.                 self.selectcgroup(fs)
  155.             elif fs.type == ':bg':     # bone group
  156.                 self.selectcgroup(fs)
  157.             elif fs.type == ':mc':     # component
  158.                 self.selectcomponent(fs)
  159.             elif fs.type == '.pcx':    # skin
  160.                 self.selectskin(fs)
  161.             elif fs.type == '.jpg':    # skin
  162.                 self.selectskin(fs)
  163.  
  164.  
  165.     def NewItem1Click(self, m):
  166.         pass
  167.  
  168.  
  169. #
  170. # List of all screen layouts
  171. # (the first one is the default one in case no other one is configured)
  172. # This list must be filled by plug-ins !
  173. #
  174. LayoutsList = []
  175.  
  176.  
  177. #
  178. # List of additionnal pages of the Multi-Pages-Panel
  179. # This list can be filled by plug-ins.
  180. #
  181. mppages = []
  182.  
  183. # ----------- REVISION HISTORY ------------
  184. #
  185. #
  186. #$Log: mdlmgr.py,v $
  187. #Revision 1.7  2003/12/17 13:58:59  peter-b
  188. #- Rewrote defines for setting Python version
  189. #- Removed back-compatibility with Python 1.5
  190. #- Removed reliance on external string library from Python scripts
  191. #
  192. #Revision 1.6  2001/03/15 21:07:49  aiv
  193. #fixed bugs found by fpbrowser
  194. #
  195. #Revision 1.5  2000/10/11 19:07:47  aiv
  196. #Bones, and some kinda skin vertice viewer
  197. #
  198. #Revision 1.4  2000/08/21 21:33:04  aiv
  199. #Misc. Changes / bugfixes
  200. #
  201. #Revision 1.2  2000/06/02 16:00:22  alexander
  202. #added cvs headers
  203. #
  204. #
  205. #
  206.